from pylab import *
import openpyxl

import numpy as np
import matplotlib.pyplot as plt

class Plan:
    def __init__(self):
        self.id=""               #编号
        self.catalyzer=""        #催化剂
        self.grad=0              #温度梯度
        self.t=[]                #温度
        self.Ethanol=[]          #乙醇转化率
        self.C4=[]               #C4烯烃选择率


cnt=-1              #实验数量
Plans=[]            #实验
sheet = openpyxl.load_workbook(r'D:\Desktop\mathematical-modeling\B\附件1.xlsx')['性能数据表']  #打开文件
index=[2,3,4,6]     #需要读取的列数
pre=""              #用于分辨实验编号
for i in range(2,115):
    if sheet.cell(i,1).value != None and sheet.cell(i,1).value != pre:
        cnt+=1
        x=Plan()
        Plans.append(x)
        pre=sheet.cell(i,1).value
        Plans[cnt].id=sheet.cell(i,1).value
        Plans[cnt].catalyzer=sheet.cell(i,2).value
    Plans[cnt].grad+=1
    Plans[cnt].t.append(sheet.cell(i,3).value)
    Plans[cnt].Ethanol.append(sheet.cell(i,4).value)
    Plans[cnt].C4.append(sheet.cell(i,6).value)


for i in range(cnt+1):
    z1 = np.polyfit(Plans[i].t, Plans[i].Ethanol, 2) # 用2次多项式拟合，可改变多项式阶数；
    p1 = np.poly1d(z1) #得到多项式系数，按照阶数从高到低排列
    print(p1)  #显示多项式


    p = np.poly1d(z1)
    plt.scatter(Plans[i].t, Plans[i].Ethanol)
    plt.plot([i for i in range(200,Plans[i].t[Plans[i].grad-1]+50)], p([i for i in range(200,Plans[i].t[Plans[i].grad-1]+50)]), color='r')
    plt.xlabel('Temperature')
    plt.ylabel('Ethanol Conversion(%)')
    plt.suptitle('Curve of ethanol conversion with temperature')
    if i<14:
        plt.savefig('A'+str(i+1)+'_Ethanol'+'.png')
    else:
        plt.savefig('B'+str(i+1)+'_Ethanol'+'.png')
    plt.clf()

 
for i in range(cnt+1):
    z1 = np.polyfit(Plans[i].t, Plans[i].C4, 2) # 用2次多项式拟合，可改变多项式阶数；
    p1 = np.poly1d(z1) #得到多项式系数，按照阶数从高到低排列
    print(p1)  #显示多项式


    p = np.poly1d(z1)
    plt.scatter(Plans[i].t, Plans[i].C4)
    plt.plot([i for i in range(200,Plans[i].t[Plans[i].grad-1]+50)], p([i for i in range(200,Plans[i].t[Plans[i].grad-1]+50)]), color='r')
    plt.xlabel('Temperature')
    plt.ylabel('Ethanol Conversion(%)')
    plt.suptitle('Curve of ethanol conversion with temperature')
    if i<14:
        plt.savefig('A'+str(i+1)+'_C4'+'.png')
    else:
        plt.savefig('B'+str(i+1)+'_C4'+'.png')
    plt.clf()








# # 乙醇转化率与温度
# for i in range(cnt):
#     if Plans[i].id[0] =='A':
#         plt.plot(Plans[i].t,Plans[i].Ethanol,label=Plans[i].id)
#         # for x, y in zip(Plans[i].t,Plans[i].Ethanol):
#         #     plt.text(x, y+0.3, '%.0f' % y, ha='center', va='bottom', fontsize=8)
# plt.legend(loc="upper right")
# plt.xlabel('Temperature')
# plt.ylabel('Ethanol Conversion(%)')
# plt.show()

# plt.clf()       #清除缓存

# # 乙醇转化率与温度
# for i in range(cnt):
#     if Plans[i].id[0] =='A':
#         plt.plot(Plans[i].t,Plans[i].C4,label=Plans[i].id)
#         # for x, y in zip(Plans[i].t,Plans[i].Ethanol):
#         #     plt.text(x, y+0.3, '%.0f' % y, ha='center', va='bottom', fontsize=8)
# plt.legend(loc="upper right")
# plt.xlabel('Temperature')
# plt.ylabel('C4 Olefin Selectivity(%)')
# plt.show()
